##########################
# 热线内容 容错匹配
# 设置一定的容错率: match_party长度1或2，全匹配；长度3或4，错1；长度5或6，错2；长度7或8，错3
# 输入：match_party：热线内容
#      key_word：匹配到的类别关键词
# 方法1 is_matched1：将 key_word 转list，比对 key_word 的每个字符，key_word 长度较少时，此法较快
# 方法2 is_matched2：在 key_word 内逐个正则.*模糊匹配，比如匹配‘经常断停水’：‘.*断停水’，‘经.*停水’，‘经常.*水’，···
# 输出：True或False（是否匹配到），匹配到的字，耗时
# Auther：wangyimeng
# Date：2020/10/28
##########################

import re
import time


# 将key_word转list，比对key_word的每个字符
def is_matched1(key_word, match_party):
    start = time.time()
    flag = False
    match = []
    hit = 0
    for word in list(key_word):
        if word in match_party:
            hit += 1
            match.append(word)
    if hit / len(key_word) > 0.5:
        flag = True
    return flag, match, time.time() - start


# 在key_word内逐个正则.*模糊匹配
def is_matched2(key_word, match_party):
    start = time.time()
    flag = False
    match = None
    # 完全匹配key_word的情况
    if re.search(key_word, match_party):
        flag = True
        match = key_word
        return flag, match, time.time() - start
    # 不能完全匹配key_word，有容错的情况
    else:
        del_num = int(len(key_word) / 2.1)  # 容错or删掉的字符个数
        for idx in range(len(key_word) - del_num + 1):
            re_key_word = key_word[:idx] + '.*' + key_word[idx + del_num:]  # 正则化查找的字符串
            print(re_key_word)
            match = re.search(re_key_word, match_party)
            if match is not None:
                flag = True
                match = match.group()
                return flag, match, time.time() - start
    return flag


key = '电梯停运'
# sentence = 're.search 扫描整个字符串并返回第一个成功的匹配，若string中包含pattern子串，则返回Match对象，否则返回None，注意，如果string中存在多个pattern子串，只返回第一个。re' \
#            '.search()方法用来精确匹配并提取第一个符合规律的对象，而对象内容的提取则使用search方法的属性group(' \
#            ')来实现。别的卡车成不成怒is把v和微博可灿灿以让本佛鳄并不是有病囃不会吧程把上次看八卦吧小区里面经常每天都断水对比哈今晚可拨打u不要的 '

sentence = '安徽省芜湖市镜湖区赭山街道凤凰山社区陈华门投诉内容：\n诉求：反映芜湖市镜湖区星隆国际城地下停车场奥特莱斯de电梯经常性的停运，对人员上下通行造成不便。\n' \
           '事实和理由：芜湖市镜湖区星隆国际城地下停车场靠近奥特莱斯那个电梯早晨8点前两部全部停运，在上班高峰期，对人员上下通行造成不便，希望能在8点前开一部电梯方便上下通行。\n' \
           '事发地：安徽省芜湖市镜湖区星隆国际写字楼\n投诉人手机号：13905532226 '
print(is_matched1(key, sentence))
print(is_matched2(key, sentence))
